home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.5)
-
- import prefs
- import config
- import dialogs
- import logging
- import eventloop
- import feedparser
- from httpclient import grabURL
- from gtcache import gettext as _
- delegate = None
- checkInProgress = False
-
- def setDelegate(newDelegate):
- global delegate
- delegate = newDelegate
-
-
- def checkForUpdates(notifyIfUpToDate = False):
- global checkInProgress
- if not checkInProgress:
- checkInProgress = True
- logging.info('Checking for updates...')
- url = config.get(prefs.AUTOUPDATE_URL)
-
- updateHandler = lambda data: _handleAppCast(data, notifyIfUpToDate)
- errorHandler = _handleError
- grabURL(url, updateHandler, errorHandler)
-
-
-
- def _handleError(error):
- global checkInProgress
- checkInProgress = False
- logging.warn('HTTP error while checking for updates')
- eventloop.addTimeout(86400, checkForUpdates, 'Check for updates')
-
-
- def _handleAppCast(data, notifyIfUpToDate):
- global checkInProgress
-
- try:
- appcast = feedparser.parse(data['body'])
- if appcast['bozo'] == '1':
- return None
-
- upToDate = True
- latest = _getItemForLatest(appcast)
- if latest is not None:
- serial = int(config.get(prefs.APP_SERIAL))
- upToDate = serial >= _getItemSerial(latest)
-
- if not upToDate:
- logging.info('New update available.')
- if hasattr(delegate, 'handleNewUpdate'):
- delegate.handleNewUpdate(latest)
- else:
- _handleNewUpdate(latest)
- elif notifyIfUpToDate:
- logging.info('Up to date. Notifying')
- _handleUpToDate()
- else:
- logging.info('Up to date.')
- except:
- logging.warn('Error while handling appcast data.')
- import traceback
- traceback.print_exc()
- finally:
- checkInProgress = False
- eventloop.addTimeout(86400, checkForUpdates, 'Check for updates')
-
-
-
- def _getItemForLatest(appcast):
- platform = config.get(prefs.APP_PLATFORM)
- rejectedItems = list()
- for item in appcast['entries']:
- rejectedEnclosures = list()
- for enclosure in item['enclosures']:
- if enclosure['dtv:platform'] != platform:
- rejectedEnclosures.append(enclosure)
- continue
-
- for enclosure in rejectedEnclosures:
- item['enclosures'].remove(enclosure)
-
- if len(item['enclosures']) == 0:
- rejectedItems.append(item)
- continue
-
- for item in rejectedItems:
- appcast['entries'].remove(item)
-
-
- try:
- appcast['entries'].sort(key = _getItemSerial, reverse = True)
- return appcast['entries'][0]
- except:
- return None
-
-
-
- def _getItemSerial(item):
- return int(item['enclosures'][0]['dtv:serial'])
-
-
- def _handleNewUpdate(item):
- url = item['enclosures'][0]['href']
-
- def callback(dialog):
- if dialog.choice == dialogs.BUTTON_DOWNLOAD:
- delegate.openExternalURL(url)
-
-
- summary = _('%s Version Alert') % (config.get(prefs.SHORT_APP_NAME),)
- message = _('A new version of %s is available. Would you like to download it now?') % (config.get(prefs.LONG_APP_NAME),)
- dlog = dialogs.ChoiceDialog(summary, message, dialogs.BUTTON_DOWNLOAD, dialogs.BUTTON_CANCEL)
- dlog.run(callback)
-
-
- def _handleUpToDate():
- title = _('%s Version Check') % (config.get(prefs.SHORT_APP_NAME),)
- message = _('%s is up to date.') % (config.get(prefs.LONG_APP_NAME),)
- dialogs.MessageBoxDialog(title, message).run()
-
-